package acwing.算法题;/**
 * @author： li
 * @date： 2022-03-10 18:36
 * @version 1.0
 */
/*
* 给定一个长度为 n+1 的数组nums，数组中所有的数均在 1∼n 的范围内，其中 n≥1。

请找出数组中任意一个重复的数，但不能修改输入的数组。
* 数据范围
1≤n≤1000
样例
给定 nums = [2, 3, 5, 4, 3, 2, 6, 7]。

返回 2 或 3。*/
public class 不修改数组找出重复的数 {
    static public int duplicateInArray(int[] nums) {
        int n=nums.length-1;
        int l=1,r=n;
        int res=0;
        while(l<r){
            int mid=(l+r)>>1;
            int count=0;
            for(int i:nums){
                if(i>=l&&i<=mid)
                    count=count+1;
            }
            if(count>mid-l+1) r=mid;
            else
                l=mid+1;
            res=mid;
        }
        return r;
    }
    public static void main(String[] args) {
        int[] nums ={2, 3, 5, 4, 3, 2, 6, 7};
        int res=duplicateInArray(nums);
        System.out.println(res);
    }
}
